home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / demos / GL / libgobj / gobj.h < prev    next >
C/C++ Source or Header  |  1994-08-01  |  5KB  |  274 lines

  1. /*
  2.  * Copyright 1984, 1991, 1992, 1993, 1994, Silicon Graphics, Inc.
  3.  * All Rights Reserved.
  4.  *
  5.  * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  6.  * the contents of this file may not be disclosed to third parties, copied or
  7.  * duplicated in any form, in whole or in part, without the prior written
  8.  * permission of Silicon Graphics, Inc.
  9.  *
  10.  * RESTRICTED RIGHTS LEGEND:
  11.  * Use, duplication or disclosure by the Government is subject to restrictions
  12.  * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  13.  * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  14.  * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  15.  * rights reserved under the Copyright Laws of the United States.
  16.  */
  17.  
  18.  
  19. /*
  20.  *  array offsets
  21.  */
  22. #define X 0
  23. #define Y 1
  24. #define Z 2
  25.  
  26.  
  27. /*
  28.  *  types of geometry sections
  29.  */
  30. #define BRANCH        0
  31. #define GEOMETRY    1
  32.  
  33.  
  34. /*
  35.  *  types of geometry sections
  36.  *  1st letter C = color  L = Lighted  I = color indexed
  37.  *  2nd letter P = polygonal  L = Line  D = point  T = tmesh  M = poly/line/pt
  38.  *  3nd letter V = per vertex  U = per unit of(polygon, line, or points)
  39.  *           S = for the entire geometry section
  40.  */
  41. #define GEOM         0
  42. #define LPV_GEOM     5
  43. #define LPU_GEOM     6
  44. #define LPS_GEOM     7
  45. #define CPV_GEOM     10
  46. #define CPU_GEOM     11
  47. #define CPS_GEOM     12
  48.  
  49. #define LLV_GEOM    13
  50. #define LLU_GEOM    14
  51. #define LLS_GEOM    15
  52. #define CLV_GEOM    16
  53. #define CLU_GEOM    17
  54. #define CLS_GEOM     18
  55.  
  56. #define LDV_GEOM    19
  57. #define LDU_GEOM    20
  58. #define LDS_GEOM    21
  59. #define CDV_GEOM    22
  60. #define CDU_GEOM    23
  61. #define CDS_GEOM     24
  62.  
  63. #define LTV_GEOM    25
  64. #define LTU_GEOM    26
  65. #define LTS_GEOM    27
  66. #define CTV_GEOM    28
  67. #define CTU_GEOM    29
  68. #define CTS_GEOM     30
  69.  
  70. #define IMV_GEOM    31
  71. #define IMU_GEOM    32
  72. #define IPV_GEOM    33
  73. #define IPU_GEOM    34
  74.  
  75. #define TLPU_GEOM    100
  76.  
  77. #define SSECTION     5
  78. #define FSECTION     6
  79. #define PSECTION     7
  80. #define LSECTION     8
  81. #define CSSECTION    10
  82. #define CFSECTION    11
  83. #define CSECTION    12
  84. #define CLSECTION    13
  85.  
  86.  
  87. /*
  88.  *  types of transforms
  89.  */
  90. #define ROTX        0
  91. #define ROTY        1
  92. #define ROTZ        2
  93. #define TRANSLATE    3
  94. #define SCALE        4
  95.  
  96. /*
  97.  *  types of color index objects 
  98.  */
  99. #define CIDX_PNT    0
  100. #define CIDX_LINE    1
  101. #define CIDX_POLF    2
  102. #define CIDX_POLY    3
  103.  
  104. /*
  105.  *  mode bit information
  106.  */
  107. #define MBACKFACE    0x1
  108. #define MTRANSPERENT    0x2
  109. #define MZMASK        0x4
  110. #define MCMASK        0x8
  111.  
  112. /*
  113.  *  sritch bit information
  114.  */
  115. #define EV_RIGHT    0x1000000
  116. #define EV_ABOVE    0x2000000
  117. #define EV_BEHIND    0x4000000
  118. #define EV_MASK        0x7000000
  119. #define EV_SHIFT    24
  120.  
  121. /*
  122.  *    Other 
  123.  */
  124. #define M_EIGHTVIEW     0x10000000
  125.  
  126. /*
  127.  *  culling specified by high bit of state
  128.  */
  129. #define CULL 0x80000000
  130.  
  131. typedef struct trans {
  132.     int type;            /* rotate translate or scale */
  133.     int angle;            /* for rotate */
  134.     float x, y, z;        /* for translate and scale */
  135. } trans_t;
  136.  
  137.  
  138. /*
  139.  *  generic section
  140.  */
  141. typedef struct generic {
  142.     int type;
  143. } generic_t;
  144.  
  145.  
  146. /*
  147.  *  branch node section
  148.  */
  149. typedef struct node {
  150.     int type;
  151.     unsigned long statebits;
  152.     unsigned long modebits;
  153.     int tcount;            /* number of transforms */
  154.     int *tlist;            /* list of transforms */
  155.     int scount;            /* number of sections */
  156.     int *slist;            /* list of sections numbers */
  157.     int *stlist;        /* list of sections types */
  158. } node_t;
  159.  
  160.  
  161. typedef struct polygon {
  162.     int vcount;
  163.     int *vnlist;
  164.     float **vlist;
  165.     float **nlist;
  166.     float **xlist;
  167.     float normal[3];
  168.     long color;
  169.     long type;
  170.     long *clist;
  171. } polygon_t;
  172.  
  173.  
  174. /*
  175.  *  geometry section
  176.  */
  177. typedef struct geometry {
  178.     int type;
  179.     long material;
  180.     long color;
  181.     float normal[3];
  182.     int pcount;
  183.     polygon_t *plist;
  184.     int vcount;
  185.     float **vlist;
  186.     float **nlist;
  187.     float **xlist;
  188.     long *clist;
  189. } geometry_t;
  190.  
  191.  
  192. typedef struct objct {
  193.     int bcount;            /* number of branch nodes */
  194.     node_t *blist;        /* list of branch nodes */
  195.     int tcount;
  196.     trans_t *tlist;
  197.     int gcount;            /* number of geometry nodes */
  198.     geometry_t *glist;        /* list of geometry nodes */
  199.     int mcount;            /* number of material nodes */
  200.     int *mlist;            /* list of material nodes */
  201.     float radius;
  202. } object_t;
  203.  
  204.  
  205. /*
  206.  *  material lists
  207.  */
  208.  
  209. typedef struct {
  210.     long id;
  211.     float data[21];
  212. } mat_t;
  213.  
  214. extern int mcount;        /* number of material nodes */
  215. extern mat_t *mlist;        /* list of material nodes */
  216.  
  217.  
  218. /*
  219.  *  prototypes for read.c
  220.  */
  221. object_t *readobj(char *fname);
  222.  
  223. void readnode_list(object_t *obj, int count);
  224.  
  225. void readtrans_list(object_t *obj, int count);
  226.  
  227. void readgeom_list(object_t *obj, int count);
  228.  
  229. void readmat_list(object_t *obj, int count);
  230.  
  231. void readnode(node_t *np);
  232.  
  233. void readssect(geometry_t *sect);
  234.  
  235. void readfsect(geometry_t *sect);
  236.  
  237. void read_tlpu_geom(geometry_t *sect);
  238.  
  239. void readpsect(geometry_t *sect);
  240.  
  241. void readcsect(geometry_t *sect);
  242.  
  243. void readcdvgeom(geometry_t *sect);
  244.  
  245. void readcdugeom(geometry_t *sect);
  246.  
  247. void read_imu_geom(geometry_t *sect);
  248.  
  249. void read_imv_geom(geometry_t *sect);
  250.  
  251. void read_ipu_geom(geometry_t *sect);
  252.  
  253. void read_ipv_geom(geometry_t *sect);
  254.  
  255. void readtrans(trans_t *t);
  256.  
  257. int readnumlist(int **nlist);
  258.  
  259. int readcnumlist(int **nlist);
  260.  
  261. int readblist(int **nlist, int **tlist);
  262.  
  263. int readmat();
  264.  
  265. void resolve_mat(object_t *obj);
  266.  
  267. void readerror(char *errbuf);
  268.  
  269. int fillbuf();
  270.  
  271. int isbinary();
  272.  
  273. object_t *breadobj(char *fname);
  274.